home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / chaosexe.zip / XMOTION.TRU < prev    next >
Text File  |  1980-01-01  |  2KB  |  71 lines

  1. !
  2. !PROGRAM TITLE "XMOTION"
  3. LIBRARY "SGLIB.TRC"
  4. DIM A(1),B(1)
  5. !
  6. CLEAR
  7. print"                     ***PENDULUM - ANIMATION OF ITS MOTION***"
  8. PRINT"This program draws the motion of the pendulum at equal time intervals."
  9. PRINT
  10. INPUT prompt"Input driving force strength (0.5 to 1.5):":g
  11. INPUT prompt"input damping ,q (2 to 4):":q
  12. INPUT prompt"Input initial position:":xint
  13. INPUT Prompt"Input initial velocity:":vint
  14. INPUT prompt"Input min. and max. time:":tmin,tmax
  15. INPUT prompt"Input drive angular frequency (try .666666666):":w
  16. LET tstep=.5
  17.  
  18. !SET WINDOW -1,1,-1,1
  19. !BOX LINES -.95,.95,-.95,.95
  20. CALL SETXSCALE(-1,1)
  21. CALL SETYSCALE(-1,1)
  22. CALL SETAXES(0)
  23. CALL SETTICKSIZES(0,0)
  24. CALL SETTITLE("PENDULUM ANIMATION")
  25. DATA 0,0
  26. CALL DATAGRAPH(A,B,0,0,"WHITE")
  27. CALL GOTOCANVAS
  28. PICTURE Pendulum
  29.     SET COLOR "white"
  30.     FOR k=1 to 2
  31.         IF k=2 then SET COLOR "black"
  32.         PLOT LINES:0,0;0,-.5;.05,-.5;.05,-.55;-.05,-.55;-.05,-.5;0,-.5
  33.     NEXT k
  34.  
  35. END PICTURE
  36.  
  37. FOR i=1 to 1000000
  38.     CALL rk4(x,v,tstep,xnew,vnew,t,w,g,q)
  39.     LET t=t+tstep
  40.     LET x=xnew
  41.     LET v=vnew
  42.     IF t>tmin    then
  43.        LET angle=x
  44.        DRAW pendulum with rotate(angle)
  45.        PLOT
  46.     END IF
  47.     IF t>tmax then LET i=1000001
  48. NEXT i
  49. get key variable
  50. CLEAR
  51. END
  52.  
  53. DEF accel(x,v,t,w,g,q)
  54.     LET accel= -sin(x)-(1/q)*v+g*cos(w*t)
  55. END DEF
  56.  
  57. SUB rk4(x,v,tstep,xnew,vnew,t,w,g,q)
  58.     DECLARE DEF accel
  59.     LET xk1=tstep*v
  60.     LET vk1=tstep*accel(x,v,t,w,g,q)
  61.     LET xk2=tstep*(v+vk1/2)
  62.     LET vk2=tstep*accel(x+xk1/2,v+vk1/2,t+tstep/2,w,g,q)
  63.     LET xk3=tstep*(v+vk2/2)
  64.     LET vk3=tstep*accel(x+xk2/2,v+vk2/2,t+tstep/2,w,g,q)
  65.     LET xk4=tstep*(v+vk3)
  66.     LET vk4=tstep*accel(x+xk3,v+vk3,t+tstep,w,g,q)
  67.     LET vnew=v+(vk1+2*vk2+2*vk3+vk4)/6
  68.     LET xnew=x+(xk1+2*xk2+2*xk3+xk4)/6
  69. END SUB
  70.  
  71.